package org.huangrui.spark.scala.sql

import org.apache.spark.sql.{SaveMode, SparkSession}

/**
 * @Author hr
 * @Create 2024-10-20 19:28 
 */
object SparkSQL05_Source_JSON {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName("SparkSQL05_Source_JSON").master("local[2]").getOrCreate()
    // 不是对应的JSON文件，会报错
    // org.apache.spark.sql.AnalysisException:
    //            Since Spark 2.3, the queries from raw JSON/CSV files are disallowed when the
    //            referenced columns only include the internal corrupt record column
    //                    (named _corrupt_record by default)
    // JSON : JavaScript Object Notation
    //        对象 ：{}
    //        数组 ：[]
    //        JSON文件：整个文件的数据格式符合JSON格式，不是一行数据符合JSON格式
    // TODO SparkSQL其实就是对Spark Core RDD的封装。RDD读取文件采用的是Hadoop，hadoop是按行读取。
    //      SparkSQL只需要保证JSON文件中一行数据符合JSON格式即可，无需整个文件符合JSON格式
    val json = spark.read.json("data/user.json")

    json.write.mode(SaveMode.Overwrite).json("output")
    json.write.mode(SaveMode.Append).csv("output")
    json.show()


    spark.stop()
  }
}
